package au.com.bus4u.service;

import au.com.bus4u.utils.PageData;

import java.util.List;
import java.util.Set;

public interface UserService {


    /**新增
     * @param pd
     * @throws Exception
     */
    public int save(PageData pd)throws Exception;



    /**删除
     * @param user_id
     * @throws Exception
     */
    public int delete(String user_id)throws Exception;



    /**修改
     * @param pd
     * @throws Exception
     */
    public int edit(PageData pd)throws Exception;

    /**修改司机
     * @param pd
     * @throws Exception
     */
    public int editDriverByUserID(PageData pd)throws Exception;

    /**修改承运商
     * @param pd
     * @throws Exception
     */
    public int editCarrierByUserID(PageData pd)throws Exception;

    /**修改
     * @param pd
     * @throws Exception
     */
    public int editStatusById(PageData pd)throws Exception;


    /**列表(带条件搜索)
     * @param pd
     * @throws Exception
     */
    public List<PageData> list(PageData pd)throws Exception;

    /**列表(带条件搜索)
     * @param pd
     * @throws Exception
     */
    public List<PageData> driverList(PageData pd)throws Exception;
    /**列表(带条件搜索)
     * @param pd
     * @throws Exception
     */
    public List<PageData> carrierList(PageData pd)throws Exception;




    /**通过id获取数据
     * @param id
     * @throws Exception
     */
    public PageData findById(String id)throws Exception;

    /**通过Email获取数据
     * @throws Exception
     */
    public List<PageData> findByEmail(String user_email)throws Exception;


    /**通过phone获取数据
     * @throws Exception
     */
    public List<PageData> findByPhone(String phone)throws Exception;



    /**批量删除
     * @param DATA_IDS
     * @throws Exception
     */
    public int deleteAll(String[] DATA_IDS)throws Exception;

    /**
     * 通过用户id查询[承运商]角色的附加数据
     * @param user_id
     * @return
     */
    public PageData findCarrierByUserID(String user_id)throws Exception;

    /**
     * 通过用户id查询[司机]角色的附加数据
     * @param user_id
     * @return
     */
    public PageData findDriverByUserID(String user_id)throws Exception;

    /**
     * 通过用户id查询[游客]角色的附加数据
     * @param user_id
     * @return
     */
    public PageData findGuestByUserID(String user_id)throws Exception;


    /**
     * 通过用户登录账户的角色ID查询用户拥有的权限(用于shiro的realm调用)
     * @param role_id
     * @return
     */
    public Set<String> findPermissionsByRoleID(Integer role_id)throws Exception ;

    /**
     * 通过用户登录账户的电话查询用户拥有的角色(用于shiro的realm调用)
     * @param phone
     * @return
     */
    public Set<String> findRolesByPhone(String phone)throws Exception ;

    /**
     * 通过订单ID查询该订单的服务人员信息
     * 如果订单为
     *      内部消化订单 管理员还未指定司机 则无服务人员信息
     *      竞拍订单 竞拍成功情况下 返回服务人员信息为 竞拍成功人的信息
     *          服务人员角色为 司机
     *          服务人员角色为 承运商
     * @param order_id
     * @return
     * @throws Exception
     */
    public PageData getServicePersonal(Integer order_id) throws Exception ;

    /**
     * 转换用户信息
     * 去除敏感数据 并封装角色属性相应的数据
     * @param pd
     * @return
     * @throws Exception
     */
    public PageData parseUserInfo(PageData pd) throws Exception;

    /**
     * 旧用户数据补全
     * @param pageData
     * @return
     * @throws Exception
     */
    public int oldUserInfoSupplement(PageData pageData) throws Exception;

    public void changeServersStatus(PageData pageData) throws Exception;

    Integer findRoleIDByPhone(String phone) throws Exception;

    /**
     * 通过用户id查询用户邮箱
     * @param user_id
     * @return
     * @throws Exception
     */
    String getEmailByUserID(String user_id)throws Exception;
}
